{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Vapor-compression refrigeration cycle\n",
    "\n",
    "\n",
    "##  coolprop\n",
    " \n",
    "\n",
    "CoolProp is a thermophysical property database and wrappers for a selection of programming environments. It offers similar functionality to REFPROP, but CoolProp is open-source and free. It was originally developed by Ian Bell, at the time a post-doc at the University of Liege, in Liege, Belgium.\n",
    "\n",
    "* http://www.coolprop.org/\n",
    "\n",
    "* https://github.com/CoolProp/CoolProp\n",
    "\n",
    "### What is CoolProp?\n",
    "\n",
    "CoolProp is a C++ library that implements:\n",
    "\n",
    "* Pure and pseudo-pure fluid equations of state and transport properties for **122 components**\n",
    "* Mixture properties using high-accuracy Helmholtz energy formulations\n",
    "* Correlations of properties of incompressible fluids and brines\n",
    "* Computationally efficient tabular interpolation\n",
    "* Highest accuracy psychrometric routines\n",
    "* User-friendly interface around the full capabilities of NIST REFPROP\n",
    "* Fast IAPWS-IF97 (Industrial Formulation) for Water/Steam\n",
    "* Cubic equations of state (SRK, PR)\n",
    "\n",
    "### Environments Supported\n",
    "\n",
    "#### Programming Languages:\n",
    "\n",
    "* Fully-featured wrappers: Python (2.x, 3.x), C++ (as static library), C++ as shared library, Modelica, Octave, C#, VB.net, MathCAD, Java, Android, MATLAB\n",
    "\n",
    "* High-level interface only: Labview, EES, Microsoft Excel, LibreOffice, Javascript, PHP, FORTRAN, Maple, Mathematica, Scilab, Delphi & Lazarus, Julia\n",
    "\n",
    "#### Architectures:\n",
    "\n",
    "* 32-bit/64-bit\n",
    "* Windows, Linux, OSX, Raspberry PI, VxWorks Compact Rio, etc. (if you can compile C++ on it, CoolProp will run)\n",
    "\n",
    "\n",
    "### Python Wrapper\n",
    "\n",
    "```\n",
    "\n",
    "pip install coolprop\n",
    "```\n",
    "\n",
    "#### PropsSI function\n",
    "\n",
    "For many users, all that is needed is a simple call to the **PropsSI** function for pure fluids, pseudo-pure fluids and mixtures. For humid air properties, see Humid air properties\n",
    "\n",
    "\n",
    "#### Table of string inputs to PropsSI function\n",
    "\n",
    "* http://www.coolprop.org/coolprop/HighLevelAPI.html#parameter-table\n",
    "\n",
    "| Parameter | Units   | Description|\n",
    "| ---- |:------:| -----------:|\n",
    "| P   | Pa\t  | Pressure     |\n",
    "| T   | K    | \tTemp       |\n",
    "| Q   |mol/mol|\tMass vapor quality |\n",
    "| H   |J/kg   |\tEnthalpy      | \n",
    "| S   |J/kg.k |\tEntropy       |\n",
    "| D   |kg/m^3 | Mass density    |\n",
    "\n",
    "\n",
    "#### The examples using PropsSI"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "292803.18233949516"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import CoolProp\n",
    "CoolProp.CoolProp.PropsSI('P', 'T', 273.15+0, 'Q', 1, 'R134a')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this example, \n",
    "\n",
    "* **The First parameter**, T, is **the output property** that will be returned from PropsSI.\n",
    "\n",
    "* **The second and fourth parameters** are the specified **input pair of properties** that determine the state point where the output property will be calculated.\n",
    "\n",
    "The output property and input pair properties are **text strings and must be quoted.** \n",
    "\n",
    "* The **third and fifth parameters** are the **values** of the **input pair properties** and will determine the state point\n",
    "\n",
    "* The **sixth and last parameter** is the fluid for which the output property will be calculated; also **a quoted string**.\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "199999.98852614488"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CoolProp.CoolProp.PropsSI('H', 'T', 273.15+0, 'Q', 0, 'R134a')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1000.0000369551423"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CoolProp.CoolProp.PropsSI('S', 'T', 273.15+0, 'Q', 0, 'R134a')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "398603.45362765493"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CoolProp.CoolProp.PropsSI('H', 'T', 273.15+0, 'Q', 1, 'R134a')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1727.0857594574675"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "CoolProp.CoolProp.PropsSI('S', 'T', 273.15+0, 'Q', 1, 'R134a')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4059280.0\n",
      "374.21\n"
     ]
    }
   ],
   "source": [
    "import CoolProp.CoolProp as cp\n",
    "pc=cp.PropsSI(\"R134a\", \"Pcrit\") #  Critical Pressure [Pa]\n",
    "Tc=cp.PropsSI(\"R134a\", \"Tcrit\") #  Critical point temperature [K]\n",
    "print(pc)\n",
    "print(Tc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2 Vapor-Compression RefrigerationCycle\n",
    "\n",
    "* https://www.cpp.edu/~tknguyen/che302/home.htm\n",
    "\n",
    "  * https://www.cpp.edu/~tknguyen/che302/Notes/chap7-1.pdf\n",
    "\n",
    "The most common refrigeration cycle is **the vapor-compression refrigeration cycle(VCR)** shown\n",
    "\n",
    "![](./img/vcr/ivcr-ts.jpg)\n",
    "\n",
    "\n",
    "* step 1 -> 2, **Isentropic compression**: saturated vapor at $P_L$ is compress isentropically to $P_H$ where it becomes superheated vapor.\n",
    "\n",
    "* step 2 -> 3, **Isobaric heat rejection**:  heat $Q_H$ is transferred to the surrounding by condensation at $T_H$. \n",
    "\n",
    "* step 3 -> 4, **Isenthalpic expansion**: the cycle is closed by throttling the liquid to the lower pressure $P_L$\n",
    "\n",
    "* step 4 -> 1, **Isobaric heat addition**: heat is removed at the temperature $T_L$ from the system being refrigerated by the evaporation of a liquid under the pressure $P_L$\n",
    "\n",
    "### An ideal vapor-compression refrigeration cycle\n",
    "\n",
    "* https://www.cpp.edu/~tknguyen/che302/home.htm\n",
    "\n",
    "  * https://www.cpp.edu/~tknguyen/che302/Notes/chap7-2.pdf\n",
    "\n",
    "Refrigerant 134a is the working fluid in an ideal vapor-compression refrigeration cycle that\n",
    "communicates thermally with a cold region at 0°C and a warm region at 26°C. \n",
    "\n",
    "Saturated vapor enters the compressor at 0°C and saturated liquid leaves the condenser at 26°C.\n",
    "\n",
    "The mass flow rate of the refrigerant is 0.08 kg/s.\n",
    "\n",
    "**Determine** \n",
    "\n",
    "* (a) the compressor power, in kW,\n",
    "\n",
    "* (b) the refrigeration capacity, in tons, \n",
    "\n",
    "* (c) the coefficient of performance \n",
    "\n",
    "![](./img/vcr/ivcr-example723.jpg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Refrigeration Cycle Analysis\n",
    "\n",
    "![](./img/vcr/ivcr-analysis.jpg)\n",
    "\n",
    "(a) The compressor work is give by\n",
    "\n",
    "$\\dot{W}_{c}=\\dot{m}*(h_2-h_1)$\n",
    "\n",
    "(b) The refrigeration capacity, in tons, is\n",
    "\n",
    "$\\dot{Q}_{in}=\\dot{m}*(h_1-h_4)*(60s/min)\\frac{1ton}{211 kJ/min}$\n",
    "\n",
    "\n",
    "(c) The coefficient of performance is\n",
    "\n",
    "$COP_c=\\frac{\\dot{Q}_{in}}{\\dot{W}_{c}}=\\frac{h_1-h_4}{h_2-h_1}$\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python Code\n",
    "\n",
    "**expressions to code directly**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The compressor work(kW): 1.41\n",
      "The refrigeration capacity(tons): 3.70\n",
      "The coefficient of performance: 9.24\n"
     ]
    }
   ],
   "source": [
    "import CoolProp.CoolProp as cp\n",
    "mdot=0.08\n",
    "t1=0\n",
    "t3=26;\n",
    "\n",
    "p1=cp.PropsSI('P', 'T', 273.15+t1, 'Q', 1, 'R134a')/1.0e6;\n",
    "h1=cp.PropsSI('H', 'T', 273.15+t1, 'Q', 1, 'R134a')/1000;\n",
    "s1=cp.PropsSI('S', 'T', 273.15+t1, 'Q', 1, 'R134a')/1000;\n",
    "\n",
    "p3=cp.PropsSI('P', 'T', 273.15+t3, 'Q', 0, 'R134a')/1.0e6;\n",
    "h3=cp.PropsSI('H', 'T', 273.15+t3, 'Q', 0, 'R134a')/1000;\n",
    "\n",
    "p2=p3;\n",
    "s2=s1;\n",
    "h2=cp.PropsSI('H', 'P',p2*1.0e6, 'S',s2*1000, 'R134a')/1000;\n",
    "\n",
    "h4=h3;\n",
    "\n",
    "# The compressor work is give by\n",
    "wc=mdot*(h2-h1);\n",
    "# The refrigeration capacity in tons\n",
    "qin=mdot*(h1-h4)*60*(1/211);\n",
    "# The coefficient of performance is\n",
    "cop=(h1-h4)/(h2-h1);\n",
    "\n",
    "print(\"The compressor work(kW): {:.2f}\".format(wc))\n",
    "print(\"The refrigeration capacity(tons): {:.2f}\".format(qin))\n",
    "print(\"The coefficient of performance: {:.2f}\".format(cop))\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### T-s Diagram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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WloaTZo0oWPHjqVua9q0aZx22mkce+yxZGVlMWrUKJ5//nk2bdrE5s2bmTFjBqNGjSIrK4ujjz6a008/nalTpxa9vmfPnrzyyisV/vwiIrvJyYENG6r10hUrVvDdd9/RtWvXUpd/9dVXdO7cuQbhfvHee+9BMPTkbkcKzGywmeUBS4FM4Kk9X12qY4Fdf7FbiX/u+r6yF/8X31ZJ/YEZxUuxc64AmA8cVN5GVTZFouzyyy8nIyODLl260LJlS04++eRS19vtw2v79mB4o1GjID096pm2bt3K//73vzI/SEt69913d1v3o48+AqBbt260bNmS8847b7dT48XNnTuXgw765XOnY8eOpKen89133/Hdd9+RlpZGp06dipYfdNBBux3Z3H///YuODouIVFo1bxDasWMH/fr1o3///nTp0qXUddavX092dnapy6pqypQpAOucc3nFn3fOjSM4VX0oMBWosDmb2QkEJXB4ZBubgPeBYWZWz8wOBX4PZFR1WyWWZQBnAY+X8tJNQE5521bZFImy+++/n02bNvHee+/Rt2/foiOdJRV9eDkHw4bB9dcHp4Fi4NJLL+Wggw7ixBNPrHDdN954gylTpnDbbbcVPbd06VKmTp3KjBkz+P7779m6dStXXXVVqa/Py8ujYcOGuz3XsGFDNm3aRF5eHg0aNCh12S67PtDXx/CuUhFJQllZVR76qLCwkPPPP5/09HTuu+++Mtdr1KjRHtexV8eWLVt49tlnAdaUttwFPge2AiPL25aZHUlw9PMs59x3xRb1AzoQXF/5AME1nEurua1d+gJrgXdKWZYNrC9v+yqbIjFQu3Ztjj76aJYuXcoDDzxQ6jpFH14TJsBZZ0GHDjHJcuONNzJnzhymT5+OVTDV5UcffcS5557Lc889t9vRx/r163PhhRfSqVMnsrKyGDJkCP/3f/9X6jaysrL2OCq5ceNGsrOzy122y64P9JycnKr8mCKS6mrVqtKUlc45LrroIlasWMGMGTOoU6dOmet2796d774rrYNVzQsvvEDjxo0hOBpYnjSg9GuVADM7BHgJGOicm1V8mXNusXPuVOdcM+fcrwius/xvdbZVTH/gCed2/wWbWRrBtaWzy/thVDZFYqigoKDMaza7d+/Od59+Cp07QxnXXdbUiBEjePXVV3n99df3OKJY0ueff87pp5/Oo48+Sq9e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2WefzeTJk0tdfu6557Jo0SI2btzISy+9xNChQ/n0009LXfe1115j3LhxzJo1i8WLF7Nw4UJGjBhR6rqrV6+mb9++jBo1irVr19KjRw/++Mc/Fi2/9dZb+f7771m8eDFvv/02d9xxB//+97+Llvfr14+HHnqowp9PRKTSSjmyWZXP023btjFlypTdDhA0btyYa665hsGDB1f4+iFDhpCXl1f0BfwM5DrnVkdWmQx0cc41AI4C+plZ39K2ZWZdgYeA84HmwBbg/jLWTQdeBJ4EGgFTgBcjz0NQJPsABwHdgdOAS4ptYlqJx9Wisik1M3489O0L++3nO0koVObI5jPPPENOTg69evUqd1tvvPEGhx56KPWKzSXft29f+vTpQ5MmTSrM0rlzZy666CK6du1a6vIOHTpQt25wdsTMMDMWLFhQ6rpTpkwp2lajRo0YNmwYjz/+eKnrPv/883Tt2pU//OEP1KtXj1tvvZXZs2fzzTffFG1r2LBhNGrUiP3335+LL754t2317NmTWbNmlXvkVESkSlq0gE27fy5X5fP0448/JicnhzZt2hQ9d/zxx3P22WfTqlWrKkWJXBbVhKD47XruW+dc8TZcCOxbxib6ATOdc+865/KAYUBfMyvt1GJPIA34m3Num3PuXsCA30WW9wcmOueWOueWAROBAcVe/zGwj5m1q9IPWYLKplTfww/DwQfDEUf4ThIau45slnU3+saNGxk+fPhup47L8tVXX9G5c+eo5ivp8ssvJyMjgy5dutCyZUtOPvnkUtebO3cuBx10UNHjgw46iBUrVrBmzZoK183MzKRjx47MnTuXdevWsXz58j22NXfu3KLHrVu3pk6dOnz77bfR+BFFRIIpK2twzWY0P4/fe+89CArgjOLPm9lgM8sDlgKZwFNlbKIrMHvXA+fcAmA70KmMdb90u1/4/2Xk+T22Ffm+6AiFc64AmE9w5LPaVDalel54AerXh969fScJlYpuEBo2bBgXXXTRbn8dl2X9+vVkx/ga2Pvvv59Nmzbx3nvv0bdv36IjnSXl5eXRsGHDose7vt+0ac+fs+S6u9bftGnTrtNHe2yr5Hays7NZv359tX4mEZE9pKdDYWG1Xx7Nz+MpU6YArIsclSzinBsHZAOHAlOBDWVsIquUZRsir63quiWXbwCydl23GbEJyCkjS6WobErVvfsuLFkC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hjjS7EDV0q9bPyadNol2DdthWHBE87RJ9OvWz3c0EZGUdf8p93NZj8uobbXBBUc0L+txmW4OiqOwnkbHOfd/wP/5zpESVq2Cu++GCROgVij//kgY/br1U7kUEQmZ+0+5PyiXt90GQ4ZAWmjrT1JSs0h1eXkwciSMHQvp6b7TiIiIxE6LFrBihe8UKUdlM5Vt3x78hTdiBGRl+U4jIiISW23awLJlFa8nUaWymaoKC+GWW+C666BZM99pREREYq91a1i61HeKlKOymYqcg1Gj4PzzoX1732lERETio00b+PFH3ylSjspmKrr3XjjuOOje3XcSERGR+GncGNau9Z0i5ahsppopU6BdOzj2WN9JRERE4ktD+3mhsplKZs4MrtXs08d3EhEREUkRKpup4r334Lvv4MILfScRERGRFKKymQq++greeCO481xERCSV1aoFO/ecK11iR2Uz2S1eHFyneeutulZFRESkeXMN7B5nKpvJbNUquPNOGDNG01CKiIgA7L23hj+KMzWQZLVpUzAz0O23Q926vtOIiIiEQ9u2KptxprKZjLZvh5tvDuY8z872nUZERCQ89t4blizxnSKlqGwmm8LCoGjecIOmoRQRESmpYUPYsMF3ipSisplMnAtuBBowQNNQioiISCiobCaTiRPhxBOhWzffSUREREQAlc3kMXky7L8//OY3vpOIiIiIFFHZTAYzZkC9enDKKb6TiIiIhF9GBmze7DtFylDZTHSzZsHPP0O/fr6TiIiIJIZ27YJJTyQuVDYT2SefwEcfwRVX+E4iIiKSOFQ240plM1F9+y089xwMGeI7iYiISGJp3x4WLfKdImWk+Q4g1bB0Kdx/f3D3ueY7FxERqRrNjx5XKpuJZu3aYArKCRMgTbtPRESkymrVCsamlrjQafREsnkzDBsGY8dC/fq+04iIiIhUSGUzUWzfDoMHw/DhwVRbIiIiIglAZTMR7Jrv/LrrgutMREREpGY01mbcqGyGXfH5zjt08J1GREQkOeiO9LhR2Qy7CRM037mIiEi07bMP/PCD7xQpQWUzzCZNggMP1HznIiIi0dahAyxc6DtFSlDZDKt//hMaNICTTvKdREREJPk0aQJr1vhOkRJUNsPo3/+G9evhnHN8JxEREUlOZhprM05UNsPmgw/gq6/gkkt8JxERERGpMZXNMPnqq+Co5g03+E4i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\n",
      "text/plain": [
       "<Figure size 720x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "\"\"\"\n",
    "T-s Diagram\n",
    "\"\"\"\n",
    "import CoolProp.CoolProp as cp\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "\n",
    "plt.figure(figsize=(10.0, 8.0))  # figsize :set figure size\n",
    "plt.title(\"T-s Diagram\")\n",
    "plt.xlabel(\"s, kJ/kgK\")\n",
    "plt.ylabel(\"T, °C\")\n",
    "plt.grid()\n",
    "\n",
    "Tc=cp.PropsSI(\"R134a\", \"Tcrit\") #  Critical point temperature [K]\n",
    "tc = Tc-273.15\n",
    "T = np.linspace(-20, tc,120)\n",
    "for x in np.array([0, 1.0]):\n",
    "    S=np.array([cp.PropsSI('S', 'T', 273.15+t, 'Q', x, 'R134a')/1000 for t in T])\n",
    "    plt.plot(S, T, 'r', lw=0.5)\n",
    "\n",
    "# cycle\n",
    "t2= cp.PropsSI('T', 'P',p2*1.0e6, 'S',s2*1000, 'R134a')-273.15\n",
    "s3=cp.PropsSI('S', 'P',p2*1.0e6, 'Q',0, 'R134a')/1000\n",
    "t4=t1\n",
    "p4=p1\n",
    "s4=cp.PropsSI('S', 'P',p4*1.0e6, 'H',h4*1000, 'R134a')/1000\n",
    "ta=t3\n",
    "sa=cp.PropsSI('S', 'T',ta+273.15, 'Q',1, 'R134a')/1000\n",
    "\n",
    "t=[t1,t2,ta,t3,t4,t1]\n",
    "s=[s1,s2,sa,s3,s4,s1]\n",
    "plt.plot(s,t, 'g-o', lw=1.5)\n",
    "\n",
    "plt.annotate('1 ({:.2f},{:.2f})'.format(s[0], t[0]),\n",
    "                 xy=(s[0], t[0]), xycoords='data',\n",
    "                 xytext=(+2, +5), textcoords='offset points', fontsize=12)\n",
    "\n",
    "plt.annotate('2 ({:.2f},{:.2f})'.format(s[1], t[1]),\n",
    "                 xy=(s[1], t[1]), xycoords='data',\n",
    "                 xytext=(+2, +5), textcoords='offset points', fontsize=12)\n",
    "\n",
    "plt.annotate('3 ({:.2f},{:.2f})'.format(s[3], t[3]),\n",
    "                 xy=(s[3], t[3]), xycoords='data',\n",
    "                 xytext=(+1, +15), textcoords='offset points', fontsize=12)\n",
    "\n",
    "plt.annotate('4 ({:.2f},{:.2f})'.format(s[4], t[4]),\n",
    "                 xy=(s[4], t[4]), xycoords='data',\n",
    "                 xytext=(+5, +5), textcoords='offset points', fontsize=12)\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "236.438px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
